package org.example.ch08.web.api;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.enums.ParameterIn;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.example.ch08.common.vo.ResultVO;
import org.example.ch08.entity.User;
import org.springframework.web.bind.annotation.*;

import java.util.Arrays;
import java.util.List;

/**
 * @ClassName UserController
 * @Description TODO
 * @Author Kx
 * @Date 2025/9/17 10:08
 * @Version 1.0
 */
@RestController
@RequestMapping("/api/v1")
// Tag注解对当前的 API 进行简要简述
@Tag(name = "用户服务接口", description = "提供用户信息相关的api操作")
public class UserController {

    private static final List<User> user;

    static {
        User u1 = new User(1, "张三", 21);
        User u2 = new User(2,"李四", 20);
        User u3 = new User(3, "王五", 19);
        user = Arrays.asList(u1, u2, u3);
    }

    /**
     * @author: kx
     * @date: 2025/9/17 11:16
     * @return org.example.ch08.common.vo.ResultVO<java.util.List<org.example.ch08.entity.User>>
     * @description: 查询所有用户信息（注意：请求 url 中不应该出现动词，由请求方法决定操作行为）
    */
    @GetMapping("/users")
    // 方法描述
    @Operation(summary = "查询用户列表", description = "查询用户列表", method = "GET")
    // 响应描述
    /*@ApiResponses({
            @ApiResponse(responseCode = "200", description = "响应成功"),
            @ApiResponse(responseCode = "500", description = "查询失败,服务器错误")
    })*/
    public ResultVO<List<User>> getUserList() {
        return ResultVO.success(user);
    }

    @GetMapping("/user/{id}")
    // 方法描述
    @Operation(summary = "查询用户信息", description = "根据用户ID查询信息", method = "GET")
    // 参数描述
    @Parameters({
            // name：参数名称（必须与形参的id相同）
            // description：参数描述
            // required：是否必须传参数
            // in：表示通过什么途径传入（请求头、请求参数、路径参数等）
            @Parameter(name = "id", description = "用户ID", required = true, in = ParameterIn.PATH)
    })
    //响应描述
    /*@ApiResponses({
            @ApiResponse(responseCode = "200", description = "响应成功"),
            @ApiResponse(responseCode = "500", description = "查询失败，服务端错误")
    })*/
    public ResultVO<User> getUser(@PathVariable("id") int uid) {
        for (User u : user) {
            if (u.getId() == uid) {
                return ResultVO.success(u);
            }
        }
        return ResultVO.error(404, "没有该用户信息");
    }

    @PostMapping("/user")
    @Operation(summary = "添加用户信息", description = "提交JSON格式的用户数据")
    @Parameters({
            @Parameter(name = "user", required = true, description = "用户信息")
    })
    public ResultVO<String> addUser(@RequestBody User user) {
        return ResultVO.success("添加成功");
    }
}
